#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
int *p;
void hand()
{
    //卸载共享内存 shmdt
    shmdt(p);
    printf("bye bye");
    exit(0);
}


int main()
{
    signal(2,hand);
    //创建key
    key_t  key = ftok(".",'m');
    if (-1==key)
    {
        printf("创建key失败：%m\n");
        exit(-1);
    }

    //创建共享内存
    int shmid = shmget(key,4096,IPC_CREAT);
    if (-1==shmid)
    {
        printf("创建共享内存失败：%m\n");
        exit(-1);
    }
    printf("创建共享内存成功\n");

    // 挂载内存 shmat  attach
     p = (int *)shmat(shmid,NULL,0666);
    if ((int * )-1==p)
    {
        printf("挂载共享内存失败：%m\n");
        exit(-1);
    }
    printf("挂载共享内存成功\n");

    int n = 0;
    //使用
    while (1)
    {
       *p = n++;
        sleep(1);
    }

    //卸载共享内存 shmdt
    shmdt(p);

    //删除共享内存 shmctl

    
    return 0;
}